package com.atwulidun.memento18;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

// 维护需要被保存状态的各个对象以及每个对象所对应的各个状态的类
public class CareTaker {
    // 维护一个HashMap，key为需要被保存状态的对象的描述，value为该对象所对应的各个状态对象
    private Map<String, List<Memento>> map;

    public CareTaker() {
        map = new HashMap<>();
    }

    public Map<String, List<Memento>> getMap() {
        return map;
    }

    // 添加需要被保存状态对象的状态对象的方法
    // 注意：需要把被保存状态的对象，以及要保存的状态对象都传进来
    public void addMemento(Originator originator,Memento memento) {
        // 获取该对象的状态对象列表
        List<Memento> list = map.get(originator.getDes());
        // 若是第一次添加状态，那么map中还没有存在originator，此时要new ArrayList<>()作为value，不然会引发空指针异常！！！！！
        if (list == null) {
            list = new ArrayList<>();
        }
        // 将状态加入到list中
        list.add(memento);
        // 再map中覆盖之前的list
        map.put(originator.getDes(), list);
    }
}
